/**********************************************************************//**
 @file ptcloud.hpp 
 @brief Contains methods for modifying and inquiring Point Cloud information.
 @author Ricardo C. Marques <rmarques@inf.puc-rio.br>
 @version 0.0.1
 @date 05/11/2012
**************************************************************************/
#ifndef _PTCLOUD_HPP
#define _PTCLOUD_HPP

#include "primitives.hpp"

class PointCloud
{
    // Constructor and Destructor
    public:
        PointCloud(const char* filename);
        PointCloud(Point3D* points, size_t num_points);
        virtual ~PointCloud();

    // Get Information about Point Cloud
    public:
        void GetCentroid(Point2D* centroid);
        void GetBoundingBox(Point2D* min, Point2D* max);
        void GetBoundingTri(Point2D* T1, Point2D* T2, Point2D* T3);

    // Visualization Methods
    public:
        void DrawPointCloud(void);
        
    // Private Methods
    private:
        void ComputeCentroid(void);


    // Private Variables
    private:
        Point3D* m_Points;     // All Vertices of Point Cloud
        size_t   m_NumPoints;  // Number of Verices of Point Cloud
        Point2D  m_Centroid;   // Centroid of Point Cloud on plane XY

};

#endif